'use client' import { use, useCallback } from 'react' import Link from 'next/link' import { Card, CardContent } from '@nextsparkjs/core/components/ui/card' import { Button } from '@nextsparkjs/core/components/ui/button' import { Separator } from '@nextsparkjs/core/components/ui/separator' import { ArrowLeft, Printer, Loader2 } from 'lucide-react' import { useTranslations } from 'next-intl' import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-registry.client' import { useInvoice } from '@nextsparkjs/core/hooks/useInvoice' import { useTeam } from '@nextsparkjs/core/hooks/useTeam' import { InvoiceStatusBadge } from '@nextsparkjs/core/components/billing/InvoiceStatusBadge' interface InvoicePageProps { params: Promise<{ invoiceNumber: string }> } function InvoicePage({ params }: InvoicePageProps) { const { invoiceNumber } = use(params) const t = useTranslations('settings.billing') const { team } = useTeam() const { data: invoiceData, isLoading, error, } = useInvoice({ invoiceNumber: decodeURIComponent(invoiceNumber), }) const invoice = invoiceData?.data const handlePrint = useCallback(() => { window.print() }, []) const formatDate = (dateString: string) => { const date = new Date(dateString) return new Intl.DateTimeFormat('en-US', { year: 'numeric', month: 'long', day: 'numeric', }).format(date) } const formatCurrency = (amount: number, currency: string) => { return new Intl.NumberFormat('en-US', { style: 'currency', currency: currency, }).format(amount) } if (isLoading) { return (
{t('invoices.empty.title')}
{invoice.invoiceNumber}
{team?.name || 'Team'}
{formatDate(invoice.date)}
| Item | Amount |
|---|---|
| {invoice.description || 'Monthly subscription'} | {formatCurrency(invoice.amount, invoice.currency)} |
Thank you for your business